home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / groupsel.d < prev    next >
Text File  |  1997-10-26  |  11KB  |  272 lines

  1. (* Konzept fr neue Gruppenauswahl und neue interne Gruppenverwaltung 
  2.  * 
  3.  * Es gibt ein Modul, das eine Gruppenliste verwaltet. Diese Gruppenliste
  4.  * wird aus einer eigenen Datei aufgebaut, die von CAT erstellt wird.
  5.  * Die Datei beinhaltet folgendes:
  6.  *
  7.  * Lokalen Gruppennamen
  8.  * Netzgruppennamen
  9.  * Chef der Gruppe
  10.  * Beschreibung der Gruppe
  11.  * Follow-Up to (erst ab Maus 9 im ITG)
  12.  * Sysop-Info fr die Gruppe
  13.  * Status der Gruppe (aus ITG)
  14.  * Lesereihenfolge (diese Gruppe an x-ter Stelle zu lesen)
  15.  * interne Gruppennummer
  16.  *
  17.  * Diese Datei wird von CAT aus dem ITG und der Gruppen.INF erstellt. 
  18.  * Wenn die Datei nicht existiert, dann wird sie neu erstellt, wobei dann 
  19.  * die Lesereihenfolge nicht festgelegt ist. 
  20.  * Wenn ein ITG neu kommt, dann wird die Datei mit der neuen ITG abgeglichen 
  21.  * und ggf. korrigiert. Ebenso, wenn neue Gruppen angelegt werden.
  22.  * 
  23.  * Das Modul, daž diese Liste verwaltet, stellt Routinen zur Verfgung, um
  24.  * auf der Liste zu arbeiten und Teillisten fr verschiedene Funktionen
  25.  * zur Verfgung zu haben. Es stellt mindestens folgende Listen zur Verfgung:
  26.  *
  27.  * Komplette Gruppenliste fr Gruppenauswahl beim An-/Abstellen 
  28.  * Gruppenliste der in CAT vorhandenen Gruppen
  29.  * Gruppenliste mit Chefstatus
  30.  * Gruppenliste mit allen Gruppen mit Schreiberlaubnis (fr neue Nachrichten)
  31.  * 
  32.  * Datenkonsistenz:
  33.  *
  34.  * Die Datei muž immer dann bearbeitet werden, wenn eine neue Gruppe in CAT
  35.  * ankommt, ein neues ITG (oder IGK!) kommt oder die Lesereihenfolge ge„ndert
  36.  * wird. Es ist darauf zu achten, daž auch CatPutz diese Datei beim L”schen
  37.  * einer Gruppe mit pflegt. 
  38.  *
  39.  * Damit die Gruppenliste nur in diesem Modul verwaltet wird, mssen Funktionen
  40.  * fr alle m”glichen Operationen vorhanden sein, auch zum L”schen von Eintr„gen.
  41.  * Auch das Umbenennen von Gruppen sollte m”glich sein. Auch die Datei GRUPPEN.INF
  42.  * sollte danach nur noch von diesem Modul behandelt werden. Sollte keine ITG 
  43.  * von der Box kommen, so muž das Modul auch mit der Datei IGK arbeiten k”nnen,
  44.  * allerdings nur eingeschr„nkt.
  45.  *
  46.  * Definitiv durch dieses Modul beeinflužt wird data, da dort bis jetzt die
  47.  * Gruppenliste verwaltet wurde. Ebenfalls ge„ndert werden muž das Modul
  48.  * GruppenAuswahl, da diese natrlich die Informationen aus dem ITG untersttzen
  49.  * soll.
  50.  *
  51.  * Ggf. weitere Anforderungen stellen sich dann w„hrend der Implementation 
  52.  * heraus.
  53.  *)
  54. DEFINITION MODULE GroupSelect;
  55.  
  56. (* Aus Platzgrnden werden bei den Namen nur Pointer gespeichert und ein 
  57.  * Block alloziert, der alle Namen enth„lt.
  58.  *)
  59.  
  60. FROM SYSTEM     IMPORT ADDRESS;
  61.  
  62. IMPORT Lists;
  63.  
  64. FROM CatTypes   IMPORT Str255Ptr;
  65.  
  66.  
  67. TYPE    
  68.         selSortType = (sName, sNet, sLang);
  69.  
  70.         rwState = (rwNA, rwOn, rwPossible, rwAskChef, rwAskSysop, rwImpossible, rwDefault, rwNoPermission);
  71.         
  72.         uState  = (uNA, uIsChef, uIsUser, uNoUser);
  73.         
  74.         netState =  (nNA, nNet, nLokal, nNetLokal, nNetForbid);
  75.         
  76.         orderState = (oNA, oOn, oOff);
  77.         
  78.         group = RECORD
  79.                   name      : Str255Ptr;    (* G-Zeile *)
  80.                   netname   : Str255Ptr;    (* N-Zeile *)
  81.                   chef      : Str255Ptr;    (* C-Zeile *)
  82.                   kurztext  : Str255Ptr;    (* :-Zeile *)
  83.                   sysop     : Str255Ptr;    (* S-Zeile *)
  84.                   followup  : Str255Ptr;    (* R-Zeile *)
  85.                   herkunft  : Str255Ptr;    (* H-Zeile *)
  86.                   sprache   : Str255Ptr;    (* P-Zeile *)
  87.                   alias     : Str255Ptr;    (* A-Zeile *)
  88.                   readNumber: INTEGER;
  89.                   catNumber : INTEGER;
  90.                   readState : rwState;      (* F-Zeile *)
  91.                   writeState: rwState;      (* F-Zeile *)
  92.                   userState : uState;       (* F-Zeile *)
  93.                   isNet     : netState;     (* F-Zeile *)
  94.                   hasProg   : BOOLEAN;      (* F-Zeile *)
  95.                   withDollar: BOOLEAN;      (* F-Zeile *)
  96.                   selected  : BOOLEAN;      (* Fr Darstellung in Liste *)
  97.                   ordered   : orderState;   (* Fr An-/Abbestellen von Gruppen *)
  98.                   orderDays : INTEGER;      (* Madness-Erweiterung: Gruppe soviel Tage zurck bestellen *)
  99.                   isUpdated : BOOLEAN;      (* Eintrag wurde aktualisiert, nur fr ITG *)
  100.                   dataLength: CARDINAL;     (* Die L„nge des folgenden Datenblocks *)
  101.                   data      : ADDRESS;      (* Block mit Daten fr Pointer oben *)
  102.                 END;
  103.  
  104.         groupPtr = POINTER TO group;
  105.  
  106. PROCEDURE ParseInfofile (): BOOLEAN;
  107. (* Parst die ITG bzw. IGK (wenn ITG nicht da) und updatet die Gruppenliste 
  108.  *)
  109.  
  110. PROCEDURE ParseRenamefile ();
  111. (* Parst die Datei REN.TXT, die Gruppenumbenennungsinformationen von 
  112.  * der MAUS enth„lt. Wird aufgerufen, wenn der Block #REN im Outfile kommt.
  113.  *)
  114.  
  115. PROCEDURE SaveGroupList(): BOOLEAN;
  116. (* Sichert die interne Gruppenliste in die Datei CATGROUP.INF 
  117.  *)
  118.  
  119. PROCEDURE SaveChangedGroupList(): BOOLEAN;
  120. (* Sichert die interne Gruppenliste in die Datei CATGROUP.INF, 
  121.  * wenn sie seit dem letzten Einlesen irgendwie ge„ndert wurde
  122.  *)
  123.  
  124. PROCEDURE ReadGroupList(): BOOLEAN;
  125. (* Liest die interne Gruppenliste, gibt Fehlercode zurck, falls nicht 
  126.  * m”glich. Falls die Liste nicht gelesen werden kann, muss CAT terminieren!
  127.  *)
  128.  
  129. (* Hier kommen jetzt Funktionen, die einzelne Listen oder Teillisten 
  130.  * den anderen Modulen zur Verfgung stellen.
  131.  *)
  132.  
  133. PROCEDURE GetReadList (VAR list : Lists.List; byReadNum: BOOLEAN; getNew, getUnread: BOOLEAN): BOOLEAN;
  134. (* Diese Prozedur liefert eine Liste der Gruppen, die in CAT vorhanden
  135.  * und damit lesbar sind. Die Gruppe 'PERS™NLICHE' ist mit enthalten.
  136.  * Die Liste ist nach der Lesereihenfolge sortiert, die Gruppe 'PERS™NLICHE'
  137.  * ist immer als erste Gruppe vorhanden (die Lesenummer davon kann nicht 
  138.  * ge„ndert werden).
  139.  * FALSE: Liste konnte nicht erzeugt werden
  140.  *)
  141.  
  142. PROCEDURE UpdateReadList (list: Lists.List): BOOLEAN;
  143. (* Hiermit wird das Modul aufgefordert, die Lesereihenfolge zu „ndern. 
  144.  * Es muž als Parameter eine Liste bergeben werden, die eine ge„nderte 
  145.  * Lesereihenfolge hat und die ber GetReadList angefordert wurde.
  146.  * FALSE: Interne Liste konnte nicht upgedatet werden
  147.  *)
  148.  
  149. PROCEDURE GetUserList (VAR list: Lists.List): BOOLEAN;
  150. (* Diese Prozedur liefert eine Liste der Gruppen, in denen man Chef ist.
  151.  * Diese wird ben”tigt, um User in andere Gruppen einzutragen.
  152.  * FALSE: Liste konnte nicht erzeugt werden
  153.  *)
  154.  
  155. PROCEDURE GetWriteList (VAR list: Lists.List; full: BOOLEAN): BOOLEAN;
  156. (* Diese Prozedur liefert eine Liste der Gruppen, in denen man schreiben 
  157.  * kann. Diese Liste wird dann benutzt, wenn man eine neue Nachricht in 
  158.  * eine Gruppe schreiben will.
  159.  * FALSE: Liste konnte nicht erzeugt werden
  160.  *)
  161.  
  162. PROCEDURE GetSelectList (VAR list: Lists.List; lokal: BOOLEAN;
  163.                          sortBy: selSortType): BOOLEAN;
  164. (* Diese Prozedur liefert eine Liste der Gruppen, die in der Maus vorhanden
  165.  * sind bzw. alle Gruppen aus dem ITG. Benutzt wird diese Liste fr die 
  166.  * Gruppenauswahl.
  167.  * lokal: Es werden nur die lokal vorhandenen Gruppen geliefert
  168.  * FALSE: Liste konnte nicht erzeugt werden
  169.  *)
  170.  
  171. PROCEDURE UpdateSelectList (list: Lists.List; resort: BOOLEAN): BOOLEAN;
  172. (* Hiermit wird das Modul aufgefordert, sich zu merken, welche Gruppen
  173.  * beim n„chsten Tausch bestellt oder abbestellt werden sollen. 
  174.  * Es muž als Parameter eine Liste bergeben werden,
  175.  * die ber GetSelectList angefordert wurde 
  176.  * FALSE: Interne Liste konnte nicht upgedatet werden
  177.  *)
  178.  
  179. PROCEDURE DeleteList (VAR list: Lists.List);
  180. (* L”scht eine Liste vollst„ndig, also auch die Wurzel davon. Danach darf
  181.  * nicht mehr auf die Liste zugegriffen werden.
  182.  *)
  183.  
  184. PROCEDURE NameToFile (REF name : ARRAY OF CHAR; 
  185.                       REF path, fname : ARRAY OF CHAR):BOOLEAN;
  186. (* Schreibt den Namen 'name' an das Ende des Files 'path\fname' 
  187.  *)
  188.  
  189. PROCEDURE RenameGroup (REF oldName, newName : ARRAY OF CHAR; extern: BOOLEAN): BOOLEAN;
  190. (* Benennt eine Gruppe um. Die GRUPPEN.INF wird danach direkt neu 
  191.  * geschrieben, die Žnderungen in den anderen Daten werden 
  192.  * am Programmende gesichert
  193.  *)
  194.  
  195. PROCEDURE AppendGroup(VAR group : ARRAY OF CHAR):BOOLEAN;
  196. (* Neuen Gruppennamen bernehmen, meckert selber, falls es nicht klappt *)
  197.  
  198. PROCEDURE GroupNumber(REF gName : ARRAY OF CHAR; VAR nr : CARDINAL):BOOLEAN;
  199. (* Gruppennummer zu einem String feststellen *)
  200. (* Wenn FALSE, dann kommt Gruppenanzahl in nr zurck, Anzahl      *)
  201. (* inklusive pers”nliche                                          *)
  202.  
  203. PROCEDURE CountCatGroups(): CARDINAL;
  204. (* Liefert die Zahl der Gruppen in CAT zurck, inklusive der pers”nlichen Gruppe 
  205.  *)
  206.  
  207. PROCEDURE NextGroupNumber(old : CARDINAL):CARDINAL;
  208. (* Nummer der n„chsten Gruppe in der Reihenfolge der momentanen Sortierung *)
  209. (* feststellen; 0FFFF = empty falls keine weiter Gruppe vorhanden ist      *)
  210.  
  211. PROCEDURE PreviousGroupNumber (old : CARDINAL):CARDINAL;
  212. (* Nummer der vorhergehenden Gruppe in der Reihenfolge der momentanen Sortierung *)
  213. (* feststellen; 0FFFF = empty falls keine weiter Gruppe vorhanden ist      *)
  214.  
  215. PROCEDURE NetGroupNumber(REF gName : ARRAY OF CHAR; VAR nr : CARDINAL):BOOLEAN;
  216. (* Gruppennummer zu einem String mit einem Netzgruppennamen feststellen *)
  217. (* Wenn FALSE, dann kommt Gruppenanzahl in nr zurck, Anzahl      *)
  218. (* inklusive pers”nliche                                          *)
  219.  
  220. PROCEDURE GroupName(nr : CARDINAL; VAR name : ARRAY OF CHAR);
  221. (* Gruppenname zu einer Nummer feststellen, liefert im Fehlerfall *)
  222. (* keinen Eintrag sondern leeren Namen *)
  223.  
  224. (* Fr die Gruppen„nderungen, die an die Maus geschickt werden *)
  225. TYPE    gcMode  = (GFIRST, GNEXT);
  226.  
  227. PROCEDURE GetGroupChange (VAR str : ARRAY OF CHAR; mode: gcMode): BOOLEAN;
  228. (* Liefert bei TRUE in str einen String mit +gname oder -gname, 
  229.  * je nachdem, ob eine Gruppe angestellt oder abgestellt werden soll
  230.  *)
  231.  
  232. PROCEDURE ClearGroupChange (VAR name : ARRAY OF CHAR);
  233. (* L”scht eine Gruppen„nderung fr die Gruppe name
  234.  *)
  235.  
  236. PROCEDURE SetFollowUp (gr : groupPtr; REF name : ARRAY OF CHAR);
  237. (* Setzt das Follow-Up fr die Gruppe group
  238.  *)
  239.  
  240. PROCEDURE GetFollowUp (REF gName: ARRAY OF CHAR; VAR followupTo : ARRAY OF CHAR): BOOLEAN;
  241. (* Setzt das Follow-Up fr die Gruppe group
  242.  *)
  243.  
  244. PROCEDURE GetNetName (VAR name: ARRAY OF CHAR);
  245. (* Liefert zu einer Gruppe den Netzgruppennamen 
  246.  *)
  247.  
  248. PROCEDURE GetWriteAccess (REF name: ARRAY OF CHAR): BOOLEAN;
  249. (* Liefert TRUE zurck, falls die Gruppe existiert und der 
  250.  * Benutzer laut ITG schreiben darf
  251.  *)
  252.  
  253. (* Funktionen fr CatPutz: *)
  254.  
  255. PROCEDURE DeleteGroup (REF gName: ARRAY OF CHAR);
  256. (* L”scht die Gruppe aus der Liste der in CAT verfgbaren Gruppen und 
  257.  * pažt die Lesenummern an. Die Filenummern fr die Datenbank
  258.  * mssen anders angepažt werden (z.B. mit SetNewCatNumber).
  259.  * Ebenso muž das Gruppen.Pos extern angepažt werden.
  260.  *)
  261.  
  262. PROCEDURE SetNewCatNumber (REF gName: ARRAY OF CHAR; newNumber: INTEGER);
  263. (* Setzt eine neue Gruppennummer fr eine Gruppe. 
  264.  * Das GRUPPEN.INF wird danach neu geschrieben 
  265.  *)
  266.  
  267. PROCEDURE SaveGruppenInf ();
  268. (* Sichert die Liste der Gruppen komplett 
  269.  *)
  270.  
  271. END GroupSelect.
  272.